// Module : Personnage
// Contient toutes les fonctions de création et de gestion d'une entité

#ifndef PERSONNAGE__H__
#define PERSONNAGE__H__

#include <stdlib.h>
#include <stdio.h>

#include <kbd.h>
#include <compat.h>
#include <tigcclib.h>

#include "sprites.h"
#include "direction.h"
#include "armes.h"
#include "sorts.h"
#include "ti.h"
#include "projectiles.h"
#include "main.h"

#include "inventaire.h"

// Définition du type (cf personnage.c)
typedef struct personnage* personnage;
///////////////


// Fonctions de récupération des informations directes sur le personnage

// Récupération de l'image associée
sprite PgetSkin(personnage perso);

// Récupération de l'abscisse
int PgetX(personnage perso);

// Récupération de l'ordonnée
int PgetY(personnage perso);

// Récupération de la vitesse de déplacement
int PgetSpeed(personnage perso);

// Récupération de la taille de l'image du personnage
int PgetDim(personnage perso);

// Récupération de l'inventaire du personnage
inventaire PgetInventaire(personnage perso);

// Récupération du nombre de points de vie actuel
int PgetHP(personnage perso);

// Récupération du nombre de points de vie max
int PgetHPMax(personnage perso);

// Récupération de la direction du personnage
direction PgetDir(personnage perso);
////////////////


// Fonctions de récupération d'informations déduites (indirectes) sur le personnage

// Récupération de la première arme du personnage
arme PgetFstWpn(personnage perso);

// Récupération de la deuxième arme
arme PgetSndWpn(personnage perso);

// Récupération du premier sort du personnage
sort PgetFstSpl(personnage perso);

// Récupération du deuxième sort
sort PgetSndSpl(personnage perso);
/////////////////


// Fonctions d'affectation d'informations directes

// Change les coordonnées de l'entité
void PmoveTo(personnage perso, int x, int y);

// Change la vitesse de déplacement
void PsetSpeed(personnage perso, int spd);

// Change le nombre de points de vie actuel
void PsetHP(personnage perso, int hp);

// Change le nombre de points de vie max
void PsetHPMax(personnage perso, int hpmax);

// Change la direction de déplacement de l'entité
void PsetDir(personnage perso, vers dir);
///////////////////


// Alloue la mémoire pour une nouvelle entité
personnage Pnew(sprite_type type);

// Libère la mémoire
void Pfree(personnage perso);

// Affiche un personnage à l'écran
void Pdisplay(personnage perso);

// Déplace un personnage : récupère la position actuelle et la direction de déplacement, puis calcule grâce à la vitesse la nouvelle position
void Pmove(personnage perso, screen e);

// TODO 
void Plancer(personnage perso, projectiles projs, projectile proj);

// Met le jeu en pause et affiche l'inventaire et les caractéristiques d'une entité
void affiche_inventaire(personnage perso);

// Change l'image d'une entité
void PchangeSprType(personnage perso, sprite_type type);

// Vérifie que la taille de l'image du personnage concorde avec l'image affectée à ce personnage
void PsetDimAccToSpr(personnage perso);

#endif
